package model

import (
	"gorm.io/gorm"
)

// User 用户数据库模型
type User struct {
	gorm.Model
	Username    string `gorm:"unique;not null"`
	Password    string `gorm:"not null"`
	Email       string `gorm:"unique"`
	Avatar      string
	WechatOpenID string `gorm:"unique"` // 微信OpenID（用于微信登录关联）
}

// FriendRelation 社交关系模型（用户好友关系）
type FriendRelation struct {
	gorm.Model
	UserID   uint   `gorm:"index"`
	FriendID uint   `gorm:"index"`
	Status   string `gorm:"default:'pending'"` // pending/accepted/blocked
}

// GameState 游戏状态模型（与用户一对一关联）
type GameState struct {
	gorm.Model
	UserID        uint              `gorm:"unique;not null"`
	Ingredients   map[string]int    `gorm:"type:json"` // 食材库存
	Dishes        map[string]int    `gorm:"type:json"` // 已制作菜品
	UnlockedRecipes []string       `gorm:"type:json"` // 已解锁菜谱
	ShopLevel     int               `gorm:"default:1"` // 店铺等级
	Coins         int               `gorm:"default:100"` // 游戏货币
	LastLoginTime int64             // 上次登录时间（用于食材补充）
	Inventory     map[string]int    `gorm:"type:json"` // 背包物品（商品/道具）
}

// Commodity 商品模型（经济系统核心）
type Commodity struct {
	gorm.Model
	Name            string `gorm:"unique;not null"` // 商品名称（如"高级烤箱"）
	Type            string // 类型（食材/道具/装饰）
	BasePrice       int    // 基础价格（游戏货币）
	CurrentPrice    int    // 当前实际售价（可能动态调整）
	PriceFluctuate  int    // 价格波动幅度（±百分比）
	Description     string // 商品描述
	Stock           int    // 当前库存数量
	ReplenishAmount int    // 每日自动补充数量（0表示不自动补充）
	MaxStock        int    // 最大库存限制（0表示无限制）
	Last7DaysSales  int    // 最近7天销量
}

// PriceHistory 商品价格历史记录模型
type PriceHistory struct {
	gorm.Model
	CommodityID uint   // 商品ID
	OldPrice    int    // 旧价格
	NewPrice    int    // 新价格
	ChangeTime  int64  // 变更时间戳
	Reason      string // 变更原因（如库存不足/促销）
}

// Transaction 交易记录模型
type Transaction struct {
	gorm.Model
	UserID     uint   // 玩家ID
	CommodityID uint  // 商品ID
	Quantity   int    // 购买数量
	TotalPrice int    // 总金额（CurrentPrice*Quantity）
	CreateTime int64  // 交易时间戳
}

// Revenue 收益统计模型
type Revenue struct {
	gorm.Model
	Date       string `gorm:"index"` // 统计日期（格式YYYY-MM-DD）
	Total      int    // 当日总收益
	Source     string // 收益来源（商品销售/任务奖励）
}

// 初始化商品测试数据（示例）
func InitTestCommodities() error {
	commodities := []model.Commodity{
		{
			Name:            "高级面粉",
			Type:            "食材",
			BasePrice:       5,
			CurrentPrice:    5,
			PriceFluctuate:  10,
			Description:     "优质小麦研磨的高筋面粉",
			Stock:           50,
			ReplenishAmount: 10,
			MaxStock:        100,
			},
		{
			Name:            "魔法烤箱",
			Type:            "道具",
			BasePrice:       50,
			CurrentPrice:    50,
			PriceFluctuate:  15,
			Description:     "提升烘焙效率的魔法道具",
			Stock:           10,
			ReplenishAmount: 2,
			MaxStock:        20,
			},
		}
	return db.DB.Create(&commodities).Error
}



// Recipe 菜品配方模型（替代硬编码的菜谱）
type Recipe struct {
	gorm.Model
	Name        string   `gorm:"unique;not null"` // 菜谱名称（如"高级蛋糕"）
	RequiredIngredients map[string]int `gorm:"type:json"` // 需要的食材及数量
	RewardCoins int      // 制作奖励金币
	UnlockedAt  int      // 解锁所需店铺等级
}

// Task 任务模型（全局任务模板）
type Task struct {
	gorm.Model
	TaskID      string `gorm:"unique;not null"`
	Description string
	TargetType  string // 任务类型（如制作菜品/收集食材/完成交易）
	TargetValue int
	RewardCoins int
	RewardItems map[string]int `gorm:"type:json"` // 奖励物品（商品ID:数量）
}

// Archive 游戏进度存档模型（版本控制）
type Archive struct {
	gorm.Model
	UserID     uint    // 用户ID
	StateJSON  string  // GameState的JSON快照
	Version    string  // 存档版本号
	CreatedAt  int64   // 存档时间戳
}


// UserTask 用户任务进度模型（用户-任务多对多）
type UserTask struct {
	gorm.Model
	UserID   uint
	TaskID   string
	Progress int `gorm:"default:0"`
	Completed bool `gorm:"default:false"`
}